﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using FONCREAGROINTEGRAL.Models;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
using System.Drawing.Drawing2D;
using System.Security.Permissions;
using System.Security.AccessControl;
using System.Security.Principal;
using System.Data.OleDb;
using System.Data.SqlClient;
using Microsoft.Reporting.WebForms;
using System.Configuration;

namespace FONCREAGROINTEGRAL.Controllers
{
    public class ctsController : Controller
    {
        int MesReporte;
        int IdAnio;
        public SistIntFoncreagroEntities entidades = new SistIntFoncreagroEntities();
        public ActionResult Index()
        {
            var query2 = entidades.EJERCICIOs.Single(cc => cc.EstadoP == true);
            var query3 = entidades.TIPOTRABAJADORs.Single(cc=>cc.Defecto == true);
            //int query2 = 2;
            // int   IdTipoTrabajador = 2;

            DateTime fechita = new DateTime(query2.Anio-1,12,31);
          var query = entidades.RHListaProvCTServ(query2.IdEjercicio, fechita, query3.IdTipoTrabajador).ToList();
          //  var query = entidades.RHListaProvCTServ(query2, fechita, IdTipoTrabajador).ToList();
                var result = (from p in query.ToList()
                              select new
                              {
                                  IdProyecto = p.Proyecto,
                                  Personal = p.Personal,
                                  FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                                  Codigo = p.Codigo,
                                  UltimoSueldo = p.UltimoSueldo,
                                  UltimaGratificacion = p.UltimaGratificacion,
                                  SextoGratificacion = p.UnSextoGratificiacion,
                                  TotalCTS = p.TotalCTS,
                                  CTSNovDic = p.CtsNovDic,
                                  Valor = p.Valor,
                              }).ToList();


            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }
        public ActionResult IndexFiltro(int? Id, int? IdTipoTrabajador, DateTime? fecha, FormCollection collection)
        {
            var query2 = entidades.EJERCICIOs.Single(cc => cc.EstadoP == true);
            var query3 = entidades.TIPOTRABAJADORs.Single(cc => cc.Defecto == true);

            DateTime fechita = DateTime.Now;
            string urlCompleta = Request.Url.ToString();
            string url = Request.RawUrl;
            int inicio = urlCompleta.Length - url.Length;
            int fin = urlCompleta.Length;
          //  var resultado = urlCompleta.Remove(inicio, url.Length);
            int pos2 = 0;
            int pos3 = 0;
            int l;
            for (l = 0; urlCompleta.Length >= l; l++)
            { 
                pos2 = urlCompleta.IndexOf('?');
            };

            string UrlCompletaFiltrada = urlCompleta.Remove(pos2, fin-pos2);

            for (l = 0; url.Length >= l; l++)
            {

                pos3 = url.IndexOf('?');
            };
            string UrlcortaFiltrada = url.Remove(pos3, url.Length - pos3);

            int start = UrlCompletaFiltrada.Length - UrlcortaFiltrada.Length;

            string Datos = UrlCompletaFiltrada.Remove(0, start);
            Datos = Datos.Remove(0,17);
            int b = 0;
            for (l = 0; Datos.Length >= l; l++)
            {
               b = Datos.IndexOf('/');

            };

            IdTipoTrabajador = query3.IdTipoTrabajador;
            var datitos = Datos.Remove(0, b + 1);
            if (Id != null && datitos != "null")
            {
                IdTipoTrabajador = Int32.Parse(datitos);  
               
            }
           
         var query = entidades.RHListaProvCTServ(Id, fechita, IdTipoTrabajador).ToList();

          
            
            if (Id==0)
            {

                query = entidades.RHListaProvCTServ(query2.Anio, fechita, query3.IdTipoTrabajador).ToList();
            }

               var result = (from p in query.ToList()
                          select new
                          {
                              IdProyecto = p.Proyecto,
                              Personal = p.Personal,
                              FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                              Codigo = p.Codigo,
                              UltimoSueldo = p.UltimoSueldo,
                              UltimaGratificacion = p.UltimaGratificacion,
                              SextoGratificacion = p.UnSextoGratificiacion,
                              TotalCTS = p.TotalCTS,
                              CTSNovDic = p.CtsNovDic,
                              Valor = p.Valor,
                          }).ToList();


            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }


        public ActionResult IndexFiltros()
        {
            var query2 = entidades.EJERCICIOs.Single(cc => cc.EstadoP == true);
            var query3 = entidades.TIPOTRABAJADORs.Single(cc => cc.Defecto == true);

            DateTime fecha = new DateTime(query2.Anio - 1, 12, 31);

            string IdTipoTrabajador = Request.QueryString["IdTipo"];
            string IdEjercicio = Request.QueryString["IdPersonal"];
            string fechas= Request.QueryString["FechaInicio"];
            int IdTipE = query2.Anio;
            int TipoTrab = query3.IdTipoTrabajador;
            if(fechas !=""){
             fecha = Convert.ToDateTime(Request.QueryString["FechaInicio"]);
            }

            if (IdTipoTrabajador!="")
            {
                TipoTrab = Int32.Parse(Request.QueryString["IdTipo"]);
            }

            if(IdEjercicio!=""){

              IdTipE =  Int32.Parse(Request.QueryString["IdPersonal"]);
            }


            var query = entidades.RHListaProvCTServ(IdTipE, fecha, TipoTrab).ToList();

            var result = (from p in query.ToList()
                          select new
                          {
                              IdProyecto = p.Proyecto,
                              Personal = p.Personal,
                              FechaIngreso = string.Format("{0:d}", p.FechaIngreso),
                              Codigo = p.Codigo,
                              UltimoSueldo = p.UltimoSueldo,
                              UltimaGratificacion = p.UltimaGratificacion,
                              SextoGratificacion = p.UnSextoGratificiacion,
                              TotalCTS = p.TotalCTS,
                              CTSNovDic = p.CtsNovDic,
                              Valor = p.Valor,
                          }).ToList();

            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);

        }

        public ActionResult CaluloProvCTServ(int id)
        {
            string strResponse = String.Empty;
            DateTime Fecha = Convert.ToDateTime(Request.Form["Fecha"]);
            try
            {
                #region comentar
                //  var query = entidades.EJERCICIOMES.Single(em => em.idejerciciomes == id);
              //  int mes = Convert.ToInt32(query.mes);
            //     if (mes == Fecha.Month)
                //     {
                #endregion

                    entidades.RHCalcProvCTServ(id, Fecha);
                  //entidades.RHCalcProvCTServ(4, Fecha);
                    strResponse = "{success: true,msg:'CTS realizada Correctamente'}";
                    return Content(strResponse);
            }
            catch
            {
                strResponse = "{success: false,msg:'Fallo en la Creación'}";
                return Content(strResponse);
            }
        }

        [HttpPost]
        public ActionResult ProvisionarCTS(int id)
        {
            String strResponse = String.Empty;
            try
            {
                int IdPersonal = Convert.ToInt32(Session["IdPersonal"].ToString());
                int IdPersonaltmp = IdPersonal;
                DateTime Fecha = Convert.ToDateTime(Request.Form["Fecha"]);
                DateTime fecha = new DateTime(Fecha.Year, Fecha.Month, Fecha.Day);
#region comentar
                // string Fechas = Fecha.ToString("MM/dd/yyyy HH:mm:ss");
                // entidades.GenerarTRANSACCIONVacaciones(IdPersonaltmp,Fecha,id);
#endregion
                entidades.GenerarTransaccionCTS(IdPersonaltmp, fecha, id);
                strResponse = "{success: true,msg:'<b>Provisión de CTS CORRECTO</b>'}";
                return Content(strResponse);
            }
            catch (Exception e)
            {
                string sms = e.Message;
                strResponse = "{success: false,msg:'Fallo en la provisión'}";
                return Content(strResponse);
            }
        }


        public ActionResult IndexRpt()
        {
            var query2 = entidades.EJERCICIOs.Single(cc => cc.EstadoP == true);
            DateTime fechaActual = System.DateTime.Now;
           int mes = fechaActual.Month;
            if (mes == 5 || mes == 6 || mes == 7 || mes == 8 || mes == 9 || mes == 10)
            {
                mes = 1;
            }
            else {
                mes = 2;
            }

            var query = entidades.RHRepUltSueldosCTS_Result1(query2.IdEjercicio, mes).ToList();
            //var query = entidades.RHRepUltSueldosCTS_Result1(5, 1).ToList();
            
            MesReporte = mes;
            IdAnio = query2.IdEjercicio;

            var result = (from p in query.ToList()
                          select new
                          {
                              Banco = p.Banco,
                              Personal = p.Personal,
                              Dni = p.DNI,
                              UltSueldo = p.UltSueldo,
                              Total = p.Total
                          }).ToList();


            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);
        }

        public ActionResult IndexFiltros2()
        {
            var query2 = entidades.EJERCICIOs.Single(cc => cc.EstadoP == true);
            string IdEjercicio = Request.QueryString["IdTipo"];
            string IdMes = Request.QueryString["IdPersonal"];
           int mes = 0;
           int IdTipE = query2.Anio;

            if (IdMes == "")
            {
                DateTime fechaActual = System.DateTime.Now;
                mes = fechaActual.Month;
                if (mes == 5 || mes == 6 || mes == 7 || mes == 8 || mes == 9 || mes == 10)
                {
                    mes = 1;
                }
                else
                {
                    mes = 2;
                }
            }
            else {
                mes = Int32.Parse(IdMes);
            }
            if (IdEjercicio != "")
            {

                IdTipE = Int32.Parse(Request.QueryString["IdTipo"]);
            }


            var query = entidades.RHRepUltSueldosCTS_Result1(IdTipE, mes).ToList();
            MesReporte= mes;
            IdAnio = IdTipE;


            var result = (from p in query.ToList()
                          select new
                          {
                              Banco = p.Banco,
                              Personal = p.Personal,
                              Dni = p.DNI,
                              UltSueldo = p.UltSueldo,
                              Total = p.Total
                          }).ToList();


            return Json(new { grid = result, total = query.Count() }, JsonRequestBehavior.AllowGet);

        }

        public ActionResult Reportdv()
        {
           string anio = Request.QueryString["IdEjercicioMes"];
           string mes = Request.QueryString["IdTipoTrabajador"];
           var query2 = entidades.EJERCICIOs.Single(cc => cc.EstadoP == true);
           if (anio=="" || anio == null || anio ==string.Empty || anio == "null")
           {
                anio  =  Convert.ToString(query2.IdEjercicio);
           }
           if (mes == "" || mes == null||mes == string.Empty || mes == "null")
           {
               DateTime fechaActual = System.DateTime.Now;
               int mesesito = fechaActual.Month;
               if (mesesito == 5 || mesesito == 6 || mesesito == 7 || mesesito == 8 || mesesito == 9 || mesesito == 10)
               {
                   mes = "1";
               }
               else
               {
                   mes = "2";
               }
           }

           if (mes == "1")
            {
                LocalReport localReport = new LocalReport();
                localReport.ReportPath = Server.MapPath("~/Content/Reportes/RHRepUltSueldos_CTS.rdlc");
                ReportDataSource reportDataSource = new ReportDataSource("DataSet1", entidades.RHRepUltSueldosCTS_Result1(Int32.Parse(anio),Int32.Parse(mes)));
                localReport.DataSources.Add(reportDataSource);
                string reportType = "EXCEL";
                string mimeType = "application/vnd.ms-excel";
                string encoding;
                string fileNameExtension = "xls";
                String deviceInfo = "";
                Warning[] warnings;
                string[] streams;
                byte[] renderedBytes;
                renderedBytes = localReport.Render(
                    reportType,
                    deviceInfo,
                    out mimeType,
                    out encoding,
                    out fileNameExtension,
                    out streams,
                    out warnings);
                Response.Clear();
                Response.ContentType = mimeType;
                Response.AddHeader("content-disposition", "attachment; filename=ReporteCTS.xls");
                Response.BinaryWrite(renderedBytes);
                Response.End();
                return File(renderedBytes, mimeType);

            }
            else {
                LocalReport localReport = new LocalReport();
                localReport.ReportPath = Server.MapPath("~/Content/Reportes/RHRepUltSueldos_CTS.rdlc");
                ReportDataSource reportDataSource = new ReportDataSource("DataSet1", entidades.RHRepUltSueldosCTS_Result1(Int32.Parse(anio), Int32.Parse(mes)));
                localReport.DataSources.Add(reportDataSource);
                string reportType = "EXCEL";
                string mimeType = "application/vnd.ms-excel";
                string encoding;
                string fileNameExtension = "xls";
                String deviceInfo = "";
                Warning[] warnings;
                string[] streams;
                byte[] renderedBytes;
                renderedBytes = localReport.Render(
                    reportType,
                    deviceInfo,
                    out mimeType,
                    out encoding,
                    out fileNameExtension,
                    out streams,
                    out warnings);
                Response.Clear();
                Response.ContentType = mimeType;
                Response.AddHeader("content-disposition", "attachment; filename=ReporteCTS.xls");
                Response.BinaryWrite(renderedBytes);
                Response.End();
                return File(renderedBytes, mimeType);
            }



        }

        public ActionResult rptctsProvicionar(string idanio, string idtrabajador)
        {
            int pidanio = Int32.Parse(idanio);
            int pidtrabajador = idtrabajador != null && idtrabajador != "null" && !string.IsNullOrEmpty(idtrabajador) ? Int32.Parse(idtrabajador) : 3;
            DateTime fechaActual = System.DateTime.Now;
            var query = entidades.RHListaProvCTServ(pidanio, fechaActual, pidtrabajador).ToList();

            LocalReport localReport = new LocalReport();
            localReport.ReportPath = Server.MapPath("~/Content/Reportes/rptctsProvicionar.rdlc");
            ReportDataSource reportDataSource = new ReportDataSource("DataSet1", entidades.RHListaProvCTServ(pidanio, fechaActual, pidtrabajador));
            localReport.DataSources.Add(reportDataSource);
            string reportType = "EXCEL";
            string mimeType = "application/vnd.ms-excel";
            string encoding;
            string fileNameExtension = "xls";
            String deviceInfo = "";
            Warning[] warnings;
            string[] streams;
            byte[] renderedBytes;
            renderedBytes = localReport.Render(
                reportType,
                deviceInfo,
                out mimeType,
                out encoding,
                out fileNameExtension,
                out streams,
                out warnings);
            Response.Clear();
            Response.ContentType = mimeType;
            Response.AddHeader("content-disposition", "attachment; filename=rptctsProvicionar.xls");
            Response.BinaryWrite(renderedBytes);
            Response.End();
            return File(renderedBytes, mimeType);
        }
    }
}
